package com.stephen.redisdemo.atomic;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author: stephen
 * @create: 2020-02-29 16:16
 * @description: 阻塞队列,offer,peek,poll方法
 *  这些方法都不会抛出异常
 */
public class BlockQueueDemo2 {

    public static void main(String[] args) throws InterruptedException {
        // 声明阻塞队列时,要指明容量
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(3);
        /**
         * offer添加元素时,若队列已满,不会抛异常,只会返回false
         * 若加了时间,如果队列已满,也是会等待一段时间
         */
        System.out.println(queue.offer("a")); // true
        System.out.println(queue.offer("b")); // true
        System.out.println(queue.offer("c")); // true
        System.out.println(queue.offer("d")); // false
        System.out.println(queue.offer("d",1,TimeUnit.SECONDS)); // false

        /**
         * peek,检查队列,返回队列第一个元素,若为空,则返回null
         */
        System.out.println(queue.peek()); // a

        /**
         * poll取元素,当队列为空时,返回null
         * 若加了时间,若队列为空,则会一直取,直到时间结束,若还没取到,就返回null
         */
        System.out.println(queue.poll()); // a
        System.out.println(queue.poll()); // b
        System.out.println(queue.poll()); // c
        System.out.println(queue.poll(2, TimeUnit.SECONDS)); // null

    }

}
